package com.zf.rabbitmq.consumer.listener.declare_type;

import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;

/**
 * 消费者
 * 消费 producer 模块中 DeclareExchangeQueueBindingByAmqpAdmin 和 DeclareExchangeQueueBindingByBean 声明的队列
 */
@Component
public class DeclareTypeConsumer {

    /**
     * 消费队列 test_bean_queue：
     * 该队列是按照 bean 的方式声明的,
     * 可以用 Message 接收，也可以用 String 接收：
     * - 如果用 Message 接收，则获取的是 消息体（byte[]body） 和 消息的详细信息
     * - 如果用 String 接收消息，获取的其实是 Message 中 byte[]body 字节数组中的数据转换成的 String
     * - 可以两个都写，也可以只写一个，且没有顺序要求。
     */
    @RabbitListener(queues = {"test_bean_queue"})
    public void consumeByBeanQueue(String msg, Message message) {
        System.out.printf("test_bean_queue 中的消息：%s Message：%s; Msg: %s\n", new String(message.getBody()), message, msg);
    }

    /**
     * 消费队列 test_amqp_admin_queue：
     * 该队列是使用 AmqpAdmin 的方式声明的，
     * 可以用 Message 接收，也可以用 String 接收：
     * - 如果用 Message 接收，则获取的是 消息体（byte[]body） 和 消息的详细信息
     * - 如果用 String 接收消息，获取的其实是 Message 中 byte[]body 字节数组中的数据转换成的 String
     * - 可以两个都写，也可以只写一个，且没有顺序要求。
     */
    @RabbitListener(queues = {"test_amqp_admin_queue"})
    public void consumeByAmqpAdminQueue(Message message, String msg) {
        System.out.printf("test_amqp_admin_queue 中的消息：%s Message：%s; Msg: %s\n", new String(message.getBody()), message, msg);
    }

}
